"""
模块是指一个独立的代码单元，
通常把相关的函数、类和变量放到一个文件中，
一个文件（.py）就是一个模块，
可以被其他程序或模块调用
好处：1.提高了代码的可复用性、可维护性
    2.解决了命名冲突，不同模块中相同地命名不会冲突

1.自定义模块
2.使用系统一些模块

导入模块：
1.import 模块名
    模块名.变量  模块名.函数  模块名.类
2.from 模块名 import 变量/函数/类
    在代码中可以直接使用变量，函数，类
3.from 模块名 import *
    表示调用了该模块中所有的内容
  如果想限制获取的内容，可以在模块里用__all__=[使用*可以访问到的内容]
4.无论是import还是from的形式，都会将模块内容进行加载
  如果不希望其进行调用，就会用到__name__
  在自己的模块里面__name__叫：__main__
  如果在其他模块中通过导入的方式调用的话__name__叫：模块名
"""
# # 导入模块
# import math
#
# # 使用模块中的函数  模块名.变量  模块名.函数  模块名.类
# result = math.sin(1)
# print(result)
#
# # 使用模块变量
# print(math.pi)

# 同时调用两个功能
from math import sin, pi

result = sin(1)
print(result)

sum_1 = result + pi
print(sum_1)

"""
当我们导入一个模块时，python解释器对模块位置的搜索顺序是：
1.当前目录
2.如果不在当前目录，python则搜索在shell变量PYTHONPATH下的每个目录
3.如果都找不到，python会查看默认路径。UNIX下，默认路径一般为/usr/local/lib/python/
模块搜索路径存储在system模块的sys.path变量中，变量里包含当前目录，PYTHONPATH和由安装过程决定的默认目录
"""
import sys

print(sys.path)
print(sys.version)  # 查看python解释器的版本
print(sys.argv)  # 运行程序时的参数,argv是一个列表
print("\n")

"""
time模块
重点：
    time()
    sleep()
    strftime("格式")  %Y  %m  %d
了解：
    t = time.localtime(t)
    元组 ---> t.tm_year  t.tm_mon
"""
import time

t = time.time()
print(t)
# time.sleep(3)

t1 = time.time()
print(t1)

# 将时间戳转成字符串
s = time.ctime(t)
print(s)
# 将时间戳转成元组
tu = time.localtime(t)
print(tu)
print(tu.tm_year)   # 在元组中可取出数据
# 将元组转成时间戳
t2 = time.mktime(tu)
print(t2)
# 将元组的时间转化成字符串
s1 = time.strftime("%Y-%m-%d %H:%M:%S")
print(s1)
# 将字符串转成元组的方式
r = time.strptime("2025/4/24","%Y/%m/%d")
print(r)
print("\n")

# datetime:time模块升级版
"""
datetime模块：
time  时间
date  日期    （data 数据）
datetime  日期时间   now()
timedelta  时间差   timedelta(day="",weeks="",...)
"""
import datetime
import time

print(datetime.time.hour)      # 只能得到一个对象
print(time.localtime().tm_hour)      # 输出当前小时

# 因为date是类，所以要求创建对象
d = datetime.date(2025,4,24)
print(d.day)
print(time.time())
print(datetime.date.ctime(d))

# datetime，timedelta
print(datetime.date.today())
# 时间差
timede1 = datetime.timedelta(days=3,hours=10)
print(timede1)

# datetime.datetime.now() ---> 得到当前的日期和时间
now = datetime.datetime.now()
print(now)
result = now - timede1
print(result)
# 缓存： 数据redis  作为缓存  redis.set(key,value,时间差)  会话：session

# random模块
import random

# 0~1之间的随机小数
ran = random.random()
print(ran)

# randrange(start,stop,step)  1~10 step=2 ---> 1,3,5,7,9
ran = random.randrange(1,10,2)
print(ran)

ran = random.randint(1,10)
print(ran)

# 随机点人
list1 = ["孙涵","青风","桃白白","水月"]
ran = random.choice(list1)
print(ran)

card = ["红桃A","方片K","梅花8","黑桃J"]
# random.shuffle函数直接在原地修改传入的列表，不返回任何值
# result = random.shuffle(card)
random.shuffle(card)   # 随机打乱列表数据
print(card)

# 验证码  大小写字母与数字的组合
def func():
    code = ""
    for i in range(4):
        ran1 = str(random.randint(0,9))
        # 利用ASCII码值转化成大写字母
        ran2 = chr(random.randint(65,90))
        # 利用ASCII码值转化成小写字母
        ran3 = chr(random.randint(97,122))

        r1 = random.choice([ran1,ran2,ran3])
        code += r1
    return code

code = func()
print(code)
print("\n")

# chr ord
print(chr(65))    # Unicode码 ---> str
print(ord("A"))    # str ---> Unicode码

# 加密算法：md5 sha1 sha256(单向) base64(双向)
import hashlib

msg = "孙涵中午一起吃饭去！"
md5 = hashlib.md5(msg.encode("utf-8"))
print(md5.hexdigest())      # 32

sha1 = hashlib.sha1(msg.encode("utf-8"))
print(sha1.hexdigest())     # 40

sha256 = hashlib.sha256(msg.encode("utf-8"))
print(sha256.hexdigest())     # 64

# 用户验证流程
password = "123456"
list2 = []
sha256 = hashlib.sha256(password.encode("utf-8"))
list2.append(sha256.hexdigest())

p_word = input("请输入密码：")
sha256 = hashlib.sha256(p_word.encode("utf-8"))
# sha256.update(p_word.encode("utf-8"))
p_word = sha256.hexdigest()
for i in list2:
    if p_word == i:
        print("登录成功！")
print("\n")

# 第三方：pillow    pip install pillow
# import pillow
import requests

# https一般是带有安全协议的，可以访问http
response = requests.get("https://baike.baidu.com/item/Unix/219943")
print(response.text)
